#include <iostream>
#include <QtGui>
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "actionfiltre.h"
#include "actionimage.h"

using namespace std;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    mdiArea = new QMdiArea;

    this->actionFichier = new ActionFichier(this);
    ActionFiltre *actionFiltre = new ActionFiltre(this);
    actionImage   = new ActionImage(this);


    //initalise l'ui
    ui->setupUi(this);

    setCentralWidget(mdiArea);

    createDockWindows();

    this->setWindowTitle("GimpShop");

    //les actions de Sauvegarde ne sont pas encore disponibles
    this->ui->actionSauvegarder->setDisabled(true);
    this->ui->actionSauvegarder_sous->setDisabled(true);

    //les menu Edition et Filtres ne sont pas encore disponible
    this->ui->menuEdition->setDisabled(false);//on devrait mettre true

    this->nb_sousFenetre=0;
    //connection des onglets
    actionFichier->connect(ui);
    actionFiltre->connect(ui);
    actionImage->connect(ui);

    QObject::connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),
                     this, SLOT(updateTout()));

}

MainWindow::~MainWindow()
{
    delete this->actionFichier;
    delete actionImage;
    delete histogramme;
    delete historique;
    delete couleur;
    delete listecalques;
    delete sliders;
    delete mdiArea;
    delete ui;
}

void MainWindow::updateTout() {
    if(mdiArea->activeSubWindow() != 0) {
        FenetreImage* fi = (FenetreImage*) mdiArea->activeSubWindow()->widget();
        fi->repaintVisu();
    }
}


QMdiArea* MainWindow::getMdiArea() {
    return mdiArea;
}

Ui::MainWindow* MainWindow::getUi(){
    return this->ui;
}

void MainWindow::createDockWindows() {
    QDockWidget *dock = new QDockWidget(tr("Histogramme"), this);
    dock->setAllowedAreas(Qt::RightDockWidgetArea);
    addDockWidget(Qt::RightDockWidgetArea, dock);
    histogramme = new WidgetHistogramme(this);
    histogramme->setMinimumHeight(100);
    histogramme->setSizePolicy(QSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred));
    dock->setWidget(histogramme);
    ui->menuFenetre->addAction(dock->toggleViewAction());

    listecalques = new WidgetCalque(this);
    listecalques->setAllowedAreas(Qt::RightDockWidgetArea);
    addDockWidget(Qt::RightDockWidgetArea, listecalques);
    ui->menuFenetre->addAction(listecalques->toggleViewAction());

    historique = new WidgetHistorique(this);
    addDockWidget(Qt::RightDockWidgetArea, historique);
    ui->menuFenetre->addAction(historique->toggleViewAction());

    couleur = new WidgetCouleur(this);
    addDockWidget(Qt::RightDockWidgetArea, couleur);
    ui->menuFenetre->addAction(couleur->toggleViewAction());

    sliders = new WidgetSliderCouleur(this);
    addDockWidget(Qt::RightDockWidgetArea, sliders);
    ui->menuFenetre->addAction(sliders->toggleViewAction());

    tabifyDockWidget(listecalques,sliders);
    tabifyDockWidget(listecalques,historique);
    listecalques->raise();

}

void MainWindow::incrementeNbSousFenetre(){
    if(!this->existeSousFenetre()){
        this->activeMenus(true);
        this->actionImage->setOutilsAccessibles(true);
    }
    this->nb_sousFenetre++;
}

void  MainWindow::decrementeNbSousFenetre(){
    this->nb_sousFenetre--;
    if(!this->existeSousFenetre()){
        this->activeMenus(false);
        this->actionImage->relacheOutils();
        this->actionImage->setOutilsAccessibles(false);
        this->histogramme->repaint();
    }
}

bool MainWindow::existeSousFenetre(){
    return this->nb_sousFenetre >0;
}

void MainWindow::activeMenus(bool activation){
    //Menu accessible
    ui->menuFiltres->setEnabled(activation);
    ui->menuFlou->setEnabled(activation);
    ui->actionSauvegarder_sous->setEnabled(activation);
    ui->menuImage->setEnabled(activation);
    ui->menuRedimensionner->setEnabled(activation);
    ui->menuEdition->setEnabled(activation);
    ui->menuRedimensionner->setEnabled(activation);

    //Sauvegarde
    ui->actionSauvegarder->setEnabled(activation);
    ui->actionSauvegarder_sous->setEnabled(activation);

}

void MainWindow::closeEvent(QCloseEvent *event){
    mdiArea->closeAllSubWindows();
    if(mdiArea->currentSubWindow()){
        event->ignore();
    }else{
        event->accept();
    }
}

ActionFichier * MainWindow::getActionFichier(){
    return this->actionFichier;
}
